package com.tansun.easycare.rule.codeblock.service;

import java.util.List;

import com.tansun.easycare.rule.codeblock.entity.RuleCodeblock;
import com.tansun.easycare.rule.codeblock.entity.RuleCodeblockInfo;
import com.tansun.easycare.rule.codeblock.model.CodeblockVO;
import com.tansun.easycare.rule.common.jfun.JFun;
import com.tansun.easycare.rule.common.model.ResponseVO;
import com.tansun.easycare.rule.common.service.RuleBaseService;
import com.tansun.easycare.rule.exception.BizException;
import com.tansun.easycare.rule.ruleversion.entity.RuleVersioninfo;

public interface RuleCodeblockService extends RuleBaseService<RuleCodeblock>{

    /**
     * 根据模型编码查找代码快信息
     *
     * @param code        模型编码
     * @param projectCode 项目代码
     */
    CodeblockVO findCodeblocks(String code, String projectCode) throws Exception;


    List<RuleCodeblock> findJFCodeblockList(String projectCode);
    
    String findCodeblocksByCode(String code, String projectCode) throws Exception;

    /**
     * 保存代码块信息
     *
     * @param codeblockVO 代码块VO
     */
    ResponseVO save(CodeblockVO codeblockVO) throws BizException;

    /**
     * 保存规则函数信息
     *
     * @param codeblockVO 代码块VO
     */
    ResponseVO saveFunc(CodeblockVO codeblockVO) throws BizException;

    /**
     * 编译执行代码
     */
    ResponseVO compile(CodeblockVO codeblockVO) throws BizException;

    /**
     * 编译执行代码
     * 通过组织成决策流的方式进行编译
     */
    ResponseVO compileByFlow(CodeblockVO codeblockVO) throws BizException;
    
    
    ResponseVO validateDrl(CodeblockVO model,boolean isFunParam);

    /**
     * 生成自定义函数,用于规则集编辑页面中
     *
     * @param projectCode 项目编码
     */
    List<JFun> genJFun(String projectCode);

    /**
     * 生成自定义函数DRL脚本
     */
    String genDrl(String projectCode);
    /**
     * 获取有效的函数drl脚本
     * @param projectCode
     * @return
     */
    public String getEffectiveFunc(String projectCode);
    /**
     * 删除代码块
     */
    void delCodeBlock(String manageId) throws BizException;

    /**
     * 当存在规则集时,添加函数DRL
     */
    void addFuncInfo(List<RuleVersioninfo> vList);
    /**
     * 当存在规则集时,添加函数DRL
     */
    List<RuleCodeblock> findParamFuncList(RuleCodeblock condition);
    /**
     * 保存并生成整个项目的函数信息
     * @param projectCode
     */
    public void saveProjectFunc(String projectCode);

    /**
     * 获取待审批的函数列表 ljt20200205
     * @return
     */
    public List<RuleCodeblockInfo> findArvalFuncParamList(RuleCodeblock condition);

    /**
     * 获取已审批的函数列表  ljt 20200211
     * @param condition
     * @return
     */
    List<RuleCodeblock> findParamFuncEffectList(RuleCodeblock condition);


	String showRuleJava(String currProjectCode);

}
